package com.example.leetcode;

/**
 * 动态规划 ** 参考题解 ** 难点
 */
public class Demo1567 {

    /**
     * dp
     * p(i)为以i结尾正最长数组 n(i)为以i结尾负最长子数组
     * 分三种情况
     */
    public int getMaxLen(int[] nums) {
        int len=nums.length;
        int p[]=new int[len];
        int n[]=new int[len];
        if (nums[0]==0){
            p[0]=0;
            n[0]=0;
        }else if (nums[0]>0){
            p[0]=1;
            n[0]=0;
        }else {
            p[0]=0;
            n[0]=1;
        }
        int maxVal=p[0];
        for (int i = 1; i < len; i++) {
            if (nums[i]>0){
                p[i]=p[i-1]+1;
                n[i]= n[i-1]==0 ? 0 : n[i-1]+1;
            }else if (nums[i]<0){
                n[i]=p[i-1]+1;
                p[i]=n[i-1]==0 ? 0 : n[i-1]+1;
                /*if (p[i-1]==0){
                    if (n[i-1]==0){
                        p[i]=0;
                        n[i]=1;
                    }else{
                        p[i]=n[i-1]+1;
                        n[i]=1;
                    }
                }else {
                    思考过程

                }*/
            }else {
                p[i]=0;
                n[i]=0;
            }
            maxVal=Math.max(maxVal,p[i]);
        }
        return maxVal;
    }
}
